package org.kgduyjj.toolbox;

import java.math.BigDecimal;
import java.util.Random;

/**
 * 数学工具类
 * 
 * @author Kgduyjj
 * @since 2020-07-26
 * @version Alpha-1.42
 *
 */
public class MathUtil {
	/** BigDecimal的0值 */
	private static final BigDecimal ZERO = BigDecimal.ZERO;

	/**
	 * 该数字是否大于0，如果非数字类型返回空，如果大于0返回True
	 * 
	 * @param number
	 * @return
	 */
	public static Boolean isPositiveNumber(Number number) {
		if (number instanceof Integer) {
			return (((Integer) number) > ZERO.intValue());
		} else if (number instanceof Long) {
			return (((Long) number) > ZERO.longValue());
		} else if (number instanceof Double) {
			return (((Long) number) > ZERO.doubleValue());
		} else {
			return null;
		}
	}

	/**
	 * 生成指定范围的随机数
	 * 
	 * @param min
	 * @param max
	 * @return
	 */
	public static Integer randomByRange(Integer min, Integer max) {
		if ((max == null) || (min == null)) {
			return null;
		}
		return (new Random().nextInt(max - min) + min);
	}

	/**
	 * 生成指定最大范围的随机数，默认最小为0
	 * 
	 * @param max
	 * @return
	 */
	public static Integer randomByRange(Integer max) {
		return randomByRange(BigDecimal.ZERO.intValue(), max);
	}

	/**
	 * 比较两个数字大小（使用longValue进行比较），若第一个数字大于第二个数字则返回True
	 * 
	 * @param first
	 * @param second
	 * @return
	 */
	public static <S extends Number, F extends Number> boolean isFirstBigger(F first, S second) {
		if ((first == null) || (second == null)) {
			return false;
		}
		return (first.longValue() > second.longValue());
	}

	/**
	 * 比较两个数字大小（使用longValue进行比较），两个数字相等
	 * 
	 * @param first
	 * @param second
	 * @return
	 */
	public static <S extends Number, F extends Number> boolean isEquality(F first, S second) {
		if ((first == null) || (second == null)) {
			return false;
		}
		return (first.longValue() == second.longValue());
	}
}
